﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;

namespace QldtSdh.BLL
{
    public partial class BizKhoaHoc_NganhDaoTao
    {
        /// <summary>
        /// Lấy danh sách Khóa học - Ngành theo khóa học
        /// </summary>
        /// <returns></returns>
        public static List<KhoaHoc_NganhDaoTao> GetListByKhoaHoc(string guidIdKhoaHoc)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var ls = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaKhoaHocGUID == guidIdKhoaHoc).OrderBy(e => e.NganhDaoTao.MaNganhDaoTao).ToList();
                if (ls != null && ls.Count > 0)
                {
                    for (int i = 0; i < ls.Count; i++)
                    {
                        ls[i].MaNganhDaoTao = ls[i].NganhDaoTao.MaNganhDaoTao;
                        ls[i].TenNganhDaoTao = ls[i].NganhDaoTao.TenNganhDaoTao;
                        ls[i].TenChuongTrinhDaoTao = ls[i].ChuongTrinhDaoTao.TenChuongTrinhDaoTao;
                    }
                }
                return ls;
            }
        }

        /// <summary>
        /// Lấy danh sách ngành theo khóa học
        /// </summary>
        /// <returns></returns>
        public static List<NganhDaoTao> GetListByKhoaHoc2(string guidIdKhoaHoc)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var ls = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaKhoaHocGUID == guidIdKhoaHoc).OrderBy(e => e.NganhDaoTao.MaNganhDaoTao).Select(e => e.NganhDaoTao).Distinct().ToList();
                return ls;
            }
        }

        public static KhoaHoc_NganhDaoTao GetByID(string maDaoTaoKhoaNganhGUID, CEMS4UG_DHKHContext dbContext = null)
        {
            if (dbContext != null)
                return dbContext.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID == maDaoTaoKhoaNganhGUID).FirstOrDefault();
            else
                using (var db = CEMS4UG_DHKHContext.GetContext())
                {
                    return db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID == maDaoTaoKhoaNganhGUID).FirstOrDefault();
                }
        }

        public static KhoaHoc_NganhDaoTao GetByID(string guidIdKhoaHoc, string guidIdNganh, string guidIdChuongTrinhDaoTao)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaKhoaHocGUID == guidIdKhoaHoc && e.MaNganhDaoTaoGUID == guidIdNganh && e.MaChuongTrinhDaoTaoGUID == guidIdChuongTrinhDaoTao).FirstOrDefault();
            }
        }

        public static bool IsExistByID(string maDaoTaoKhoaNganhGUID)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID == maDaoTaoKhoaNganhGUID).FirstOrDefault() == null ? false : true;
            }
        }

        public static CODE_RESULT_RETURN Add(KhoaHoc_NganhDaoTao obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var khndt = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaKhoaHocGUID == obj.MaKhoaHocGUID && e.MaNganhDaoTaoGUID == e.MaNganhDaoTaoGUID && e.MaChuongTrinhDaoTaoGUID == obj.MaChuongTrinhDaoTaoGUID).FirstOrDefault();
                if (khndt != null)
                    return CODE_RESULT_RETURN.MaTrung;
                obj.MaDaoTaoKhoaNganhGUID = Guid.NewGuid().ToString();
                db.KhoaHoc_NganhDaoTaoDbSet.Add(obj);
                db.SaveChanges();
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<KhoaHoc_NganhDaoTao>(nhatKy, null, obj.MaDaoTaoKhoaNganhGUID, LOAIDOITUONG.CHI_TIẾT_KHÓA_HỌC, LOAITHAOTAC.Thêm);
                BizNhatKyHoatDong.Add<KhoaHoc_NganhDaoTao>(nhatKy, obj);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }

        public static CODE_RESULT_RETURN Update(KhoaHoc_NganhDaoTao obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var khndts = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID != obj.MaDaoTaoKhoaNganhGUID && e.MaKhoaHocGUID == obj.MaKhoaHocGUID && e.MaNganhDaoTaoGUID == obj.MaNganhDaoTaoGUID).ToList();
                if (khndts != null && khndts.Count > 0)
                {
                    foreach (var item in khndts)
                    {
                        if (item.MaChuongTrinhDaoTaoGUID == obj.MaChuongTrinhDaoTaoGUID)
                            return CODE_RESULT_RETURN.MaTrung;
                    }
                }

                var khndt = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID == obj.MaDaoTaoKhoaNganhGUID).FirstOrDefault();
                if (khndt == null)
                    return CODE_RESULT_RETURN.ThatBai;
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<KhoaHoc_NganhDaoTao>(nhatKy, khndt, obj.MaDaoTaoKhoaNganhGUID, LOAIDOITUONG.CHI_TIẾT_KHÓA_HỌC, LOAITHAOTAC.Chỉnh_sửa);

                khndt.MaChuongTrinhDaoTaoGUID = obj.MaChuongTrinhDaoTaoGUID;
                khndt.MaKhoaHocGUID = obj.MaKhoaHocGUID;
                khndt.MaNganhDaoTaoGUID = obj.MaNganhDaoTaoGUID;
                db.SaveChanges();
                BizNhatKyHoatDong.Add<KhoaHoc_NganhDaoTao>(nhatKy, khndt);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }

        public static CODE_RESULT_RETURN Delete(KhoaHoc_NganhDaoTao obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var khndt = db.KhoaHoc_NganhDaoTaoDbSet.Where(e => e.MaDaoTaoKhoaNganhGUID == obj.MaDaoTaoKhoaNganhGUID).FirstOrDefault();
                if (khndt == null)
                    return CODE_RESULT_RETURN.ThatBai;
                if (khndt.ListLopKhoaNganh != null && khndt.ListLopKhoaNganh.Count > 0)
                    return CODE_RESULT_RETURN.ThatBai;
                db.KhoaHoc_NganhDaoTaoDbSet.Remove(khndt);
                db.SaveChanges();
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<KhoaHoc_NganhDaoTao>(nhatKy, khndt, obj.MaDaoTaoKhoaNganhGUID, LOAIDOITUONG.CHI_TIẾT_KHÓA_HỌC, LOAITHAOTAC.Xóa);
                BizNhatKyHoatDong.Add<KhoaHoc_NganhDaoTao>(nhatKy, null);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }
    }

}
